#ifndef _CONTENT_MANAGER_H
#define _CONTENT_MANAGER_H

#include <string>
using namespace std;
#include "..\EdgeMath\Vectors.h"
#include "../EdgeAudio/AudioManager.h"
class Model;
class ShaderContainer;
struct Material;
struct ID3D11ShaderResourceView;
class SoundEffect2D;
class SoundEffect3D;
class Texture2D;
class TextureCube; 
class VertexBuffer;

class ContentManager
{
	ContentManager(const char* contentDirectory);
	~ContentManager(void);

	string contentDirectory;

	static ContentManager* instance;
	
public:
	Model* LoadMdl(const char* filename, bool dynamic = false);
	VertexBuffer* LoadVertexBuffer(const char* filename, bool dynamic = false);


	ShaderContainer* LoadShaderPair(const char* vertexShaderFilename, const char* pixelShaderFilename, const char* geometryShaderFilename = nullptr);
	ShaderContainer* LoadShaders(const char* vertexShaderFilename, const char* pixelShaderFilename, const char* geometryShaderFilename = nullptr, const char* hullShaderFilename = nullptr, const char* domainShaderFilename = nullptr);
	Material* LoadMaterial(const char* filename);

	Texture2D* LoadTexture(const char* filename, float* out_width = nullptr, float* out_height = nullptr, Vector4* transparent_color = nullptr);
	TextureCube* LoadTextureCube(const wchar_t* filename);

	SoundEffect2D* LoadSoundEffect2D(const char* filename);	
	SoundEffect3D* LoadSoundEffect3D(const char* filename);

	static void Init(const char* contentDirectory);
	static void Shutdown(void);

	static ContentManager* GetInstance(void);
};

#endif